package com.xxxtea.sdk;

import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.StrUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.autoconfigure.mail.MailProperties;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;

/**
 * 邮件服务类
 * 
 * 负责邮件发送相关的功能，包括：
 * - 发送普通邮件
 * - 发送验证码邮件
 * - 邮件发送日志记录
 * 
 * 使用Spring Boot的邮件自动配置功能
 * 
 * @author badman
 * @since 1.0.0
 */
@Slf4j
@Service
public class EmailService {
	
	/**
	 * 邮件配置属性，包含发件人邮箱、SMTP配置等
	 */
	@Resource
	private MailProperties mailProperties;
	
	/**
	 * Java邮件发送器，用于实际发送邮件
	 */
	@Resource
	private JavaMailSender mailSender;

	/**
	 * 发送邮件
	 * 
	 * 发送指定内容的邮件到目标邮箱
	 * 
	 * @param targetEmail 目标邮箱地址
	 * @param title 邮件标题
	 * @param text 邮件内容
	 */
	public void send(String targetEmail, String title, String text) {
		// 创建邮件消息对象
		SimpleMailMessage message = new SimpleMailMessage();
		// 设置发件人（从配置中获取）
		message.setFrom(mailProperties.getUsername());
		// 设置收件人
		message.setTo(targetEmail);
		// 设置邮件标题
		message.setSubject(title);
		// 设置邮件内容
		message.setText(text);
		// 发送邮件
		mailSender.send(message);
		// 记录发送成功日志
		log.info("成功发送邮件给: {}, 标题: {}", targetEmail, title);
	}

	/**
	 * 发送验证码邮件
	 * 
	 * 生成4位随机验证码并发送到指定邮箱
	 * 
	 * @param email 目标邮箱地址
	 */
	public void sendVerificationCode(String email) {
		// 生成4位随机验证码
		String code = IdUtil.fastSimpleUUID().substring(0, 4);
		// 发送验证码邮件
		this.send(email, "注册验证码", StrUtil.format("您的验证码是: {}，有效期 5 分钟。", code));
	}
}